package cn.icanci.loopstack.plugin.dalgen.factory;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 配置KV键值对
 * 
 * @author icanci
 * @since 1.0 Created in 2022/05/13 17:37
 */
public enum ConfigKVEnum {
                          /**
                           * DRIVER 数据库驱动
                           */
                          DRIVER("driver", true),
                          /**
                           * DATABASE 数据库
                           */
                          DATABASE("dataBase", true),
                          /**
                           * CONNECT_URL 完整数据库连接
                           */
                          CONNECT_URL("connectUrl", true),
                          /**
                           * LOGIN_NAME 数据库登录账号
                           */
                          LOGIN_NAME("loginName", true),
                          /**
                           * PASSWORD 数据库登录密码
                           */
                          PASSWORD("password", true),
                          /**
                           * DB_MODULE 数据库模块，多数据源情况下需要使用，来区分不同的dao和管理数据源
                           */
                          DB_MODULE("dbModule", false),
                          /**
                           * REMOVE_PRE_TABLE 需要移除的前缀
                           */
                          REMOVE_PRE_TABLE("removePreTable", false),
                          /**
                           * INCLUDE 是否全表
                           */
                          INCLUDE("include", true),
                          /**
                           * PROJECT_PATH 项目模块路径
                           * 如果是模块应用，则不需要填写
                           * 如果是模块应用，则需要填写模块路径
                           */
                          PROJECT_PATH("projectPath", false),
                          /**
                           * PACKAGE_NAME 包名字
                           */
                          PACKAGE_NAME("packageName", true),
                          /**
                           * AUTHOR_NAME 作者
                           */
                          AUTHOR_NAME("authorName", true),
                          /**
                           * CUSTOM_HANDLE_INCLUDE 
                           */
                          CUSTOM_HANDLE_INCLUDE("customHandleInclude", true),;

    private static final Set<String>               KEYS    = new HashSet<>();
    private static final Map<String, ConfigKVEnum> MAPPING = new HashMap<>();
    static {
        ConfigKVEnum[] configKVs = ConfigKVEnum.values();
        for (ConfigKVEnum configKV : configKVs) {
            KEYS.add(configKV.getKey());
            MAPPING.put(configKV.getKey(), configKV);
        }
    }
    /**
     * 配置 Key
     */
    private final String  key;

    /**
     * 是否必须
     */
    private final boolean must;

    ConfigKVEnum(String key, boolean must) {
        this.key = key;
        this.must = must;
    }

    public String getKey() {
        return key;
    }

    public boolean isMust() {
        return must;
    }

    public static final Set<String> getKeys() {
        return KEYS;
    }

    public static final ConfigKVEnum getEnumByKey(String key) {
        return MAPPING.get(key);
    }
}
